package cn.duli.xianer.dao;

import cn.duli.xianer.pojo.WantGoods;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface WantGoodsMapper {

    // 新增求购商品
    int save(WantGoods wantGoods);

    // 修改求购商品信息
    void update(WantGoods wantGoods);

    // 根据id查找此求购商品基本信息
    WantGoods findById(@Param("wgId") Integer wgId);

    // 根据id删除此求购商品
    void deleteById(@Param("wgId") Integer wgId);

    // 根据id取消删除的求购商品(回收站回收某个求购商品)
    void cancelDeleteById(@Param("wgId") Integer wgId);


    // 根据id下架此求购商品
    void shelveById(@Param("wgId") Integer wgId);

    // 根据id取消被下架的求购商品（上架）
    void cancelShelveById(@Param("wgId") Integer wgId);

    // 根据用户id查询该用户审核中的求购商品列表
    Page<WantGoods> findVerifyIngByUid(@Param("wgUid") Integer wgUid);

    // 根据用户id查询该用户审核失败的求购商品列表
    Page<WantGoods> findDieVerifyByUid(@Param("wgUid") Integer wgUid);

    // 根据用户id查询该用户下架的求购商品列表
    Page<WantGoods> findShelveByUserId(@Param("wgUid") Integer wgUid);

    // 分页查询所有审核中的求购商品列表
    Page<WantGoods> findAllVerifyIng();

    // 分页查询所有审核失败的求购商品列表
    Page<WantGoods> findDieVerify();

    // 分页查询所有正常的求购商品列表
    Page<WantGoods> findSellIng();

    // 分页查询所有下架了的求购商品列表
    Page<WantGoods> findShelved();

    // 根据求购商品id修改此求购商品的审核状态
    void updateMode(WantGoods wantGoods);

    // 根据用户id查询此用户发布成功的求购商品列表（所有审核状态为1正常的求购商品）
    Page<WantGoods> findByUserId(@Param("wgUid") Integer wgUid);

    // 分页查询所有求购商品(所有状态)
    Page<WantGoods> findAll();

    // 分页根据商品名称模糊查询求购商品列表
    Page<WantGoods> queryLikeByGoodName(@Param("wgName") String wgName);

    // 分页根据类别名模糊查询求购商品列表
    Page<WantGoods> queryLikeByTypeName(@Param("tName") String tName);

    // 分页根据发布地点查询求购商品列表
    Page<WantGoods> queryLikeByAddr(@Param("wgAddress") String wgAddress);

    // 分页根据时间区间动态查询发布的求购商品列表
    Page<WantGoods> queryByTimeInterval(@Param("startTime") String startTime, @Param("endTime") String endTime);

    // 分页根据二级类别id查询该类别下的求购商品列表
    Page<WantGoods> queryByTypeTwoLevelId(@Param("tId") Integer tId);


    // 根据求购商品id修改此求购商品浏览量
    void updateViewNum(WantGoods wantGoods);

    // 根据时间区间、价格区间、类别动态分页查询求购商品列表
    Page<WantGoods> queryDynamic(@Param("startTime") String startTime, @Param("endTime") String endTime,
                             @Param("lowPrice") String lowPrice, @Param("topPrice") String topPrice,
                             @Param("wgTid") String wgTid);

    // 查找求购商品总数
    int findWantGoodsCount();

}
